約 4,069,115 件
https://w.atwiki.jp/projecthikky/pages/40.html
勉強メモ Java 参照型 通信(TCP) java.lang.Object の hashCode() について java.lang.Object の finalize() について データベース(RDBMS,SQL) 時間表示に便利なAPI 参照型 class Test{public static void main(String[] args) { Human tom = new Human("Jack"); //新しい人間(本名Jack)を1人作ってそいつにtomというニックネームで呼ぶことにする Human joe = tom; // tomとニックネームをつけた人間(Jack)をjoeというニックネームでも呼ぶことにする tom = null; //tomというニックネームで誰かを呼ぶことをやめる、 //tomというニックネームで呼ばれる人間はいなくなる (Jackはもうtomとは呼ばれない) tom = new Human("Cindy"); //別の新しい人間(本名Cindy)を作ってそいつをtomというニックネームで呼ぶことにする Foo(tom); // Fooメソッドに tom と呼んでる人間(Cindy)を引数として渡す tom.die(); // tomと呼ばれてる人間(Cindy)を死なす joe = null; // joeというニックネームで誰かを呼ぶことをやめる、 //joeというニックネームで呼ばれる人間はいなくなる、 //また同時にJackをニックネームで呼ぶ者がいなくなったためJackは失踪する joe.die(); // joeと呼ばれてる人間はいないので存在しない者を死なすことは出来ない} static void Foo(Human bob) { //引数で渡された人間を このFooのメソッド内では ひとまずbobというニックネームで呼ぶことにする bob = null; //このメソッド内でbobというニックネームで誰かを呼ぶことをやめる、 //このメソッド内でbobと呼ばれる人間はいなくなる }} 通信(TCP) java.nio.channels.ServerSocketChannel java.nio.channels.SocketChannel を使って非同期の通信ができる (JDK1.7からbind()メソッドが追加されたので巷のやりかたを少し変える必要があるかも) java.lang.Object の hashCode() について (JavaVMのデフォルトでは)乱数によって定まる ※参考資料 java.lang.Object#hashCode()の性質 - 地平線に行く http //d.hatena.ne.jp/chiheisen/20120318/1332071962 java.lang.Object の finalize() について オーバーライドするとgc(ガベージコレクト)のときに呼ばれるが 必ず呼び出されるとは限らない gcの対象になった最初のgc時にfinalize()が呼び出され、次のgcのときにメモリの解放がなされる いつ呼び出されるか分からない(いつのgcで呼び出されるか分からない) C++のデストラクタとは性質が全く異なることに注意 デストラクタ・ファイナライザ - Wikipedia http //ja.wikipedia.org/wiki/%E3%83%87%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%BF データベース(RDBMS,SQL) JDKには Apache Derby (Java DB)と呼ばれるリレーショナルデータベースが同梱されてる JDKのインストールフォルダにdbという名前のフォルダがあり そのdbフォルダの中のderby.jarというファイルを自分のプロジェクトのフォルダにコピーして使うと ローカルで簡易なデータベースが扱えるようになる (クラスパスCLASSPATHというのを設定する必要がある) Apache Derby http //db.apache.org/derby/ Getting Started with Derby https //builds.apache.org/job/Derby-docs/lastSuccessfulBuild/artifact/trunk/out/getstart/index.html Using Java DB in Desktop Applications http //www.oracle.com/technetwork/articles/javase/javadb-141163.html Apache Derbyの組み込み型とUDT/UDFの使い方のメモ - seraphyの日記 http //d.hatena.ne.jp/seraphy/20120722 時間表示に便利なAPI Joda-Time - Java date and time API http //www.joda.org/joda-time/
https://w.atwiki.jp/tamorintech/pages/14.html
別ページにまとめてるもの。 Javaのプリミティブラッパークラスはすべて不変である。 サーブレットのセッション管理(2012/3/18 旧ブログから移行) サーブレット・JSPのライフサイクル(2012/3/18 旧ブログから移行) 集約とコンポジション(2012/3/18 旧ブログから移行) サーブレットコンテナ(2012/3/18 旧ブログから移行) JNDIってどんなものなのか。(2012/3/7)何となくの理解。 Java -- DBでの日付・日時のデータについて。(2012/2/5 Evernoteから移行)DB側の話。 Java側の話。 上記からわかったこと! PATH環境変数とCLASSPATH環境変数は全く関係ないものなんですよ。(2012/2/4 旧wikiから移行) サーブレットの認証方式。(2012/2/4 旧wikiから移行) サーブレットはスレッドセーフに。(2012/2/4 旧wikiから移行) スレッドローカルとは。(ThreadLocal)(2012/2/4 旧wikiから移行) アノテーションとは。(2012/2/4 旧wikiから移行) 別ページにまとめてるもの。 log4j Android Javaのプリミティブラッパークラスはすべて不変である。 よって、ラッパークラスオブジェクトを参照値渡ししてメソッド内で計算しても、メソッド呼び出し側のオブジェクトには結果が反映されない。 private void exec() { Integer value = new Integer(5); System.out.println("メソッド実行前のint値 " + value.toString()); increment(value); System.out.println("メソッド実行後のint値 " + value.toString()); } private void increment(Integer integer) { // 内部的には // integer = new Integer( integer.intValue() + 1 ); // のようなことが行われている。つまりメソッド内のinteger は別の新しいオブジェクトを参照することになる。 integer++; System.out.println("メソッド内での計算結果 " + integer.toString()); } メソッド実行前のint値 5 メソッド内での計算結果 6 メソッド実行後のint値 5 サーブレットのセッション管理(2012/3/18 旧ブログから移行) 今日はホントにメモだけ!(時間ないからね!) サーブレット・JSPのライフサイクル(2012/3/18 旧ブログから移行) とりあえずメモだけアップしておく。まだ目的は達成してないけど・・・。 知りたいことは以下のこと。Tomcat(サーブレットコンテナ)がクラスをロードしたり、サーブレットのinit / service / destroy の呼び出しを行っている部分の詳細な動きが知りたい。 JSPリソースへのリクエストを受け取ったとき、それをJSPから変換したサーブレットへのリクエストへと切替えている部分の詳細な動き。 Tomcatはサーブレットのインスタンスをどのようにしてシングルトンで管理しているのか。 やっぱりTomcatのソースをじっくり読みたい・・・。 集約とコンポジション(2012/3/18 旧ブログから移行) 新人の後輩から質問されて答えられず。そもそも明確な違いは定義しにくく、「曖昧」らしい。 集約とコンポジション、Javaのコードに落とせばどちらも同じ。「全体」のメンバ変数に「部分」のオブジェクトが定義されていることになる。 上記は車クラスが「全体」であるのに対し、車体・エンジン・タイヤクラスが「部分」にあたる。ひし形の色は白なので集約の関連があることを表している。 車クラスをJavaコードにすると以下のようになる。 public class Car { private Body body; private Engine engine; private Tyre tyre; ・・・ } クラス図のひし形の部分が黒で塗りつぶされていて、コンポジションをあらわしていたとしても車クラスは上記と同じコードとなる(のはず)。 他の技術系の記事を参考にすると、コンポジションは両オブジェクト間のライフサイクルが同じ、もしくは強い依存の関係にある場合に使用する。 ということは、集約とコンポジションでJavaコードに違いが出てくるところと言えばオブジェクトの生成の仕方とかだろうか? 車クラスと車体・エンジン・タイヤクラスがコンポジションの関連にある場合、車クラスのコンストラクタで車体・エンジン・タイヤクラスのオブジェクトを必ずnewするとか。もしくはメンバ変数の宣言部でnewしちゃうとか。 public class Car { private Body body = new Body(); private Engine engine = new Engine(); private Tyre tyre = new Tyre(); ・・・ } まぁその辺りも想定するシナリオとかで変わってくる気がする…。 とにかく、集約とコンポジションの違いについて深く悩むことにあまり価値はないと自分に言い聞かせる。(笑) サーブレットコンテナ(2012/3/18 旧ブログから移行) サーブレットコンテナというキーワードで少し勉強した。一番知りたかったのは、「Webサーバ」と「サーブレットコンテナ」の機能の切り分け。 サーブレットコンテナについては前よりイメージがわいてきた。Servlet API / JSP API の参照実装(RI)であること。HttpServletの実装をTomcat等のサーブレットコンテナは持っている。 サーブレットのインスタンス化や破棄など、ライフサイクルの管理を行っていること。 3つの動作形態の種類があること。スタンドアロン型-サーブレットコンテナ自身がWebサーバを内蔵している。Tomcatはこれにあたるので、単体でサーブレットアプリケーションを動かせる。 内部プロセス型 外部プロセス型 Tomcatの設定ファイルを覗いてみるとなんとなく仕組みがわかってくる。なんとなくだが・・・ Connector がWebサーバ機能を担う定義なんじゃなかろうか。 他のWebサーバを使用するため、TomcatのWebサーバの機能をOFFにするにはserver.xmlの Connector 要素を削除するって書いてあったし。 ここでの機能は、クライアントからのリクエストをサーブレットコンテナ(エンジン)に渡すこと。 結局、Webサーバの詳細な機能ははっきりとわからなかった。サーブレットコンテナというキーワードを絡めずに、Webサーバそのものについて今後調べないと! ところで、サーブレットアプリケーションのメインプログラムは何なのか?Javaプログラムはmainメソッドの起動から始まる、と教えてもらったはず。ちょっと調べてみたところ、Tomcatの場合、Bootstrapクラスがそれに当たる模様。 確かにBootstrapクラスにはmainメソッドがあり、Tomcatの起動用スクリプトを見てみてもBootstrapクラスをjavaコマンドにより実行しているようだ。 ただこのBootstrap.classがbootstrap.jarとcatalina.jarという二つのjarファイルに存在する。 これは同じクラス(全く同じモジュール)と考えてよいのか? あ、ちなみにここまで、Tomcat 6についての話。。 5.5のディレクトリ中身を見てみたらまたちょっと違うようだ。あまり気にしなくても大丈夫かな…? JNDIってどんなものなのか。(2012/3/7) JNDIとはJava Naming and Directory Interfaceの頭文字を取ったもので、Javaから •ネーミング・サービス •ディレクトリー・サービス を扱うためのインターフェイスを規定した仕様です。 だそう。こういう定義は他でもいくつか目にするんだが、いまいちイメージがわかない。 何となくの理解。 本質ではなくwebアプリ(サーブレット)に限定した理解だが、DB接続をJNDIで行う場合は以下な感じ。DB接続情報(=DataSource)をサーバーの設定ファイル(Tomcatの場合はcontext.xml)に定義する。その実態はjava.sql.DataSourceクラス(のオブジェクト?)である。 Javaプログラムでは、java.naming.InitialContext#lookupメソッドで、定義したDataSourceを取得する。 DataSource#getConnectionメソッドでjava.sql.Connectionを取得し、DB接続が開始できる。 以下を読むと上記の実装例があり、どんなものかが少しわかった。ありがたい。http //www.javaroad.jp/opensource/js_tomcat8.htm http //blogs.yahoo.co.jp/kensinisnek/11707751.html Java -- DBでの日付・日時のデータについて。(2012/2/5 Evernoteから移行) DB側の話。 標準のSQL(?)では、日付・時刻のデータを持つカラムの型は以下のとおりとなっているようだ。DATA日付のみのデータを持つ。 TIME時刻のみのデータを持つ。精度(桁数?)は指定できる。 TIMESTAMP日付+時刻のデータを持つ。精度は指定できる。 Java側の話。 ここで扱う日付・日時に関するクラスの継承関係は以下のとおり。java.util.Datejava.sql.Date java.sql.Time java.sql.Timestamp java.util.Date日付と日時の両方のデータを持つ。時刻はミリ秒まで。 java.sql.Date日付のデータのみ持つ。基底クラス(java.util.Date)の時・分・秒・ミリ秒には0が設定される。 java.sql.Time時刻のデータのみ持つ。基底クラス(java.util.Date)の年・月・日には1970年1月1日が設定される。 java.sql.Timestamp日付と時刻のデータを持つ。時刻はナノ秒まで。 java.sql.ResultSetインターフェースについて。getDateメソッド:java.sql.Dateを返す。 getTimeメソッド:java.sql.Timeを返す。 getTimestampメソッド:java.sql.Timestampを返す。 上記からわかったこと! テーブルに対応するデータオブジェクト(エンティティクラス)を設計するとき、DBのDATE、TIME、TIMESTAMPのカラムに対応するプロパティは、java.sqlパッケージのクラスを使えってことだね。 PATH環境変数とCLASSPATH環境変数は全く関係ないものなんですよ。(2012/2/4 旧wikiから移行) PATH環境変数は、OSがプロンプトから入力されたコマンドに対するプログラムを検索する際の検索先である。 CLASSPATH環境変数はJavaソースのコンパイル時、プログラム実行時に必要となるクラスファイルを検索する際の検索先である。 よって2つはなんら関係ないものである。 サーブレットの認証方式。(2012/2/4 旧wikiから移行) サーブレットにおける認証方式の種類は以下のものがある。Basic認証:HTTPのBasic認証を使った方式。 Digest認証:HTTPのBasic認証を使うが、パスワードをダイジェストエンコードして暗号化する。 Form認証:HTMLのformを使ってユーザーIDとパスワードを入力する。 Client-Cert認証:クライアント証明書を使って認証を行う方式。 Tomcat標準のレルムレルムとは、ユーザーIDとパスワードをサーバー側でどのように管理するかの設定方法である。XMLベースのテキストファイルやデータベース等がある。 UserDatabaseRealmTomcatでデフォルトで設定されている方式。 ID、パスワード、ロールをtomcat-user.xmlファイルに記載する。 UserDatabaseに対して行った変更が変更情報としてtomcat-user.xmlファイルに書き込まれる? JDBCRealmID、パスワード、ロールをデータベースに格納し、JDBC経由で認証を行う。 JNDIRealmNIS、ActiveDirectory等のディレクトリサービスにID、パスワード、ロールを格納しJNDI経由で認証を行う。 DataSourceRealmJDBC経由で認証を行うが、JDBCへの接続にJNDIルックアップを使用する。 サーブレットはスレッドセーフに。(2012/2/4 旧wikiから移行) サーブレットのインスタンスは(基本的に)1つのみサーブレットコンテナにより作成される。 クライアントからの要求は複数同時に処理される。1リクエスト=1スレッドと考えてよい。 スレッドに関して、サーブレットコンテナは以下の特徴がある。サーブレットコンテナはスレッドプールを持っており、そこに複数のスレッドを蓄えている。 サーブレットコンテナはクライアントからリクエストを受け付けると空きスレッドを割り当て、サーブレットに渡して処理を移譲する。サーブレットのインスタンス数は1つである。 スレッドローカルとは。(ThreadLocal)(2012/2/4 旧wikiから移行) ThreadLocalは、スレッド毎の値を保持する為のクラス。 あるクラス(のインスタンス)がマルチスレッドで呼ばれる際に、スレッド毎に異なる値(インスタンス)を使いたい場合に使用する。 自分でThread(やRunnable)を使ってマルチスレッド化しているならスレッド毎の値が保持できるので、ThreadLocalを使用しても意味がない。 しかし、Webアプリケーション(サーブレット)は1つのインスタンスがマルチスレッドで呼ばれるので、そのスレッド毎に別のインスタンスを保持したいときはとても便利である。 アノテーションとは。(2012/2/4 旧wikiから移行) アノテーションとは、プログラムの動作に影響を与えない注釈、メタデータ。クラスやメソッド、パッケージ等に付与する。 コメントとの主な違いは以下のとおり。プログラムでアノテーションを読み取って処理できる。 アノテーションはコンパイラの動作に影響を与える。 標準アノテーションとして以下のようなものが定義されている。(J2SE 5.0)Override Deprecatedそのメソッドの使用が推奨されないことを示す。(Javadocの@deprecatedと同じ意味を持つ。) そのメソッドを使用するとコンパイル時に警告が出る。 SuppressWarningコンパイル時の警告を抑制する。 抑制する警告の種別はアノテーションの文字列配列の引数を渡すことにより指定が可能。 アノテーションの定義の仕方。「@interface」でアノテーションが定義できる。 以下のように型定義の本体が空のアノテーションをマーカーアノテーションという。 public @inteface Myannotation{ } 同じアノテーションをクラス、メンバ変数、メソッド、それぞれに適用できるようだ。 @Myannotation() public class TestMain { @Myannotation() private String var; @Myannotation() public static void main(String[] args) { } }
https://w.atwiki.jp/javaapl/pages/15.html
Javaは例外処理機構を備えており、プログラム実行中に生じた異常(例外)の扱いを、 比較的安全な方法で行い、プログラムを読みやすく記述することができる。 Javaでは簡潔なメモリモデルを採用しており、プログラマがメモリ (主記憶装置) を管理する負担を軽減する。 あらゆるオブジェクトはメモリ内のヒープという領域に割り当てられる。 メモリ管理は、Java仮想マシンに統合された自動ガベージコレクションの機能によって行われる。 従来のオブジェクト指向プログラミング言語である C++ では、ヒープ領域に生成したオブジェクトについて、 もはや必要が無くなった時に破棄する指示を、プログラマが自分で責任をもって行わなければならなかった。 これは、C++ プログラマにとっては負担が大きく複雑で間違えやすい作業であり、 ソフトウェアの安全性・開発効率・保守性を損なう要因だった。 Javaでは自動ガベージコレクションの機能があるため、このようなことは無く、プログラマの負担は大きく軽減される。 Javaのもう一つの特徴はプラットフォームに依存していないことであり、これは Javaのプログラムがさまざまなハードウェアやオペレーティングシステム上で必ず同じように動く、ということを意味する。
https://w.atwiki.jp/javaapl/pages/14.html
JDK(Java Development Kit)をダウンロードすれば 「API」、「コンパイラ」、「Java VM」がインストールされる。 あとはエディタにコードを記載して、コンパイルして実行するだけ。
https://w.atwiki.jp/api_programming/pages/107.html
下位ページ Content 文字列文字列の値を確認isEmpty() 文字列の切り出し先頭のi文字目を出す 最後のn文字を切り落とす 文字列の探索 文字列の置換 文字列の分解 エスケープシーケンス http //www.viste.com/Java/Language/language4.html 文字列 java.lang.String java.lang.StringBuilder 文字列の値を確認 isEmpty() 長さが0だとtrueを返す。但し、文字列がnull(初期化されていない)と、エラーになるので注意する(nullは長さ0(length()==0)では無い。) isEmpty() 文字列の切り出し 先頭のi文字目を出す String.charAt(i-1) インデックスは0から始まる 最後のn文字を切り落とす 文字列の長さを取得(length) 文字列の長さ length-1 を返す int len = str.length(); str.substring(0,len-1-n); 文字列の探索 s1を探して、開始位置を返す String.indexOf(s1) indexOf(s1) 開始位置をずらして(オフセットして)、s1を探す String.indexOf(s1,offset) 文字列の置換 実行した文字列自体は変更されず、置換した結果は戻り値として得られる。 str.replace(c1,c2) replace str.replaceAll(regex, replacement) ← 正規表現が使える replaceAll 文字列の分解 public String[] split(String regex) 正規表現が使える string.split() エスケープシーケンス JavaDrive
https://w.atwiki.jp/nisya2015/pages/15.html
1.環境構築ダウンロード設定 1-1.開発環境(IDE) 1-1-1.ダウンロード 1-1-2.zip展開 1-1-3.動作確認 1-2.JUNIT 1-2-1.ダウンロード 1-2-2.任意のDirに保管 1-2-3.環境変数追加 1-2-4.Eclipsビルドパス追加 1-2-5.動作確認 1-3.DB(Mysql) 1-3-1.ダウンロード 1-3-2.インストール 1-3-3.環境変数追加 1-3-4.接続確認 1-4.jdbc(Mysql) 1-4-1.ダウンロード 1-4-2.zip展開 1-4-3.動作確認 1.環境構築ダウンロード設定 1-1.開発環境(IDE) 1-1-1.ダウンロード http //mergedoc.sourceforge.jp/ 上記サイトで、「Pleiades All in One ダウンロード」 [Eclips 4.4 Luna Pleiades All in One]→32bitのJavaにある[Download]で、pleiades-e4.4-java-32bit-jre_20140926.zipをローカルの任意Dirに保管 1-1-2.zip展開 任意のDirにzip展開。ここでは"D \Program Files\pleiades-java"にした。 1-1-3.動作確認 ・Eclipsで新規Javaプロジェクト作成。 ここでは"testEclips"→完了(プロジェクト名以外はデフォルトのまま) ・src配下に「クラス」を作成。 ここでは"TestEclipsClass"→完了(プロジェクト名以外はデフォルトのまま) Classの中身は以下 TestEclipsClass.java package testEclips; public class TestEclipsClass { public static void main(String[] args) throws Exception { TestEclipsClass m = new TestEclipsClass(); m.smain(args); } public void smain(String[] args) throws Exception { System.out.println("args=" + args); } } ・実行。 1-2.JUNIT 1-2-1.ダウンロード http //junit.org/ 上記サイトで、「Download and install」→「junit.jar」 ポップアップでるがそのままOK Version4.12のDownloadにある[jar]で、junit-4.12.jarをローカルの任意Dirに保管 1-2-2.任意のDirに保管 ここでは"D \Program Files\junit"にjarそのものを保管した。 1-2-3.環境変数追加 [コントロールバネル] [システム] [システムの詳細設定] [環境変数]を選択。 下段のシステムの環境変数の中からPathを選択して、[編集]を選択。すでに入っている値の最後に”;”をつけてから、パスを追加する。ここでは";D \Program Files\junit"にした。 1-2-4.Eclipsビルドパス追加 プロジェクトを選択して、[ブロパティ] [Javaのビルドパス]を選択。 [ライブラリ]タブ [ライブラリの追加] [ユーザライブラリ] [次へ] [ユーザライブラリ] [新規]を選択。 ライブラリを作成するために、[JUnit4]と名前をつける。 続いて、[外部Jar追加]。ここで、②のjunit-4.12.jarを選択する。 1-2-5.動作確認 ・Eclipsで新規Javaプロジェクト作成。 ここでは"testJunit"→完了(プロジェクト名以外はデフォルトのまま) ・src配下に「クラス」を作成。 ここでは"TestJunitClass"→完了(プロジェクト名以外はデフォルトのまま) Classの中身は以下 TestJunitClass.java package testJunit; public class testJunutClass { public String testMethodString(String in1) { String out1; out1 = in1 + "out"; return out1; } public int testMethodInt(int in1) { int out1; out1 = in1 + 10; return out1; } } ・src配下に「Junitテスト・ケース」を作成。 ここでは"TestJunitClassTest"→完了(プロジェクト名以外はデフォルトのまま) 「Junit4がビルド・パスにありません。追加しますか?」ダイアログは そのままOK。 Classの中身は以下 TestJunitClassTest.java package testJunit; import static org.junit.Assert.*; import org.junit.Test; public class TestJunitClassTest { @Test public void testCase1() { TestJunitClass testJunitClass = new TestJunitClass(); assertEquals((String)"ABCout", testJunitClass.testMethodString("ABC")); } @Test public void testCase2() { TestJunitClass testJunitClass = new TestJunitClass(); assertEquals((String)"ABCout", testJunitClass.testMethodString("ABCD")); } } ・実行。 1-3.DB(Mysql) 1-3-1.ダウンロード http //dev.mysql.com/ 上記サイトで、mysql-installer-community-5.6.22.0.msiをローカルの任意Dirに保管 1-3-2.インストール mysql-installer-community-5.6.22.0.msiを実行 [Choosing Setup Type] DeveloperDefault [Check Requirements] 何も選択せず。 [Installation] Executeで始まる [Product Configuration] そのままNext MySQL Server 5.6.22 [Type and Networking] そのままNext [Accounts and Roles] ルートパスワード設定(mysqlで設定した)。ユーザも必要に応じて(testuser作成してみた。パスはユーザ名) [Windows Service] そのままNext [Apply Server Configuration] Executeで始まる Samles and Examples [Connect To Server] Checkボタンンで確認できる。"Connection successful."と出るか [Apply Server Configuration] Executeで始まる MySQL Server 5.6.22 "Configuration Complete."と出る Samles and Examples "Configuration Complete."と出る [Installation Complete] そのままFinish 1-3-3.環境変数追加 システム環境変数のPathに、";C \Program Files\MySQL\MySQL Server 5.6\bin"追加 1-3-4.接続確認 DOS窓にて ・サービス起動確認 net start|find "MySQL56" MySQL56 ・接続確認 mysql -u root -p Enter password ***** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6 Server version 5.6.22-log MySQL Community Server (GPL) Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type help; or \h for help. Type \c to clear the current input statement. mysql quit Bye ・動作確認-テーブル作成 mysql CREATE DATABASE test_db; mysql CREATE TABLE test_db.test_table (colint int, colvarchar varchar(10)); mysql show tables from test_db; mysql insert into test_db.test_table values(1,"aaa"); mysql insert into test_db.test_table values(2,"bbb"); mysql select * from test_db.test_table; +--------+------------+ | colint | colvarchar | +--------+------------+ | 2 | bbb | | 1 | aaa | +--------+------------+ 2 rows in set (0.00 sec) mysql commit; 1-4.jdbc(Mysql) 1-4-1.ダウンロード http //dev.mysql.com/ 上記サイトで、mysql-connector-java-5.1.34.zipをローカルの任意Dirに保管 1-4-2.zip展開 任意のDirにzip展開。ここでは"D \Program Files\mysqljdbc"にした。 1-4-3.動作確認 ・Eclipsで新規Javaプロジェクト作成。 ここでは"testJdbc"→完了(プロジェクト名以外はデフォルトのまま) ・src配下に「クラス」を作成。 ここでは"TestMysqlJdbc"→完了(プロジェクト名以外はデフォルトのまま) Classの中身は以下 TestMysqlJdbc.java package testJdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class TestMysqlJdbc { public static void main (String args[]) throws SQLException { System.out.println("Connection"); Connection conn =DriverManager.getConnection( "jdbc mysql //localhost/test_db?user=testuser password=testuser"); System.out.println("Statement"); Statement stmt = conn.createStatement(); System.out.println("ResultSet"); ResultSet rset = stmt.executeQuery("select * from test_table"); while ( rset.next() ) { System.out.print(rset.getInt(1) + "\t" + rset.getString(2)); System.out.print("|"); System.out.print(rset.getInt("colint") + "\t" + rset.getString("colvarchar")); System.out.println(""); } System.out.println("ResultSet close"); rset.close(); System.out.println("Statement close"); stmt.close(); System.out.println("Connection close"); conn.close(); } } ・プロジェクトプロパティのJavaのビルド・パスで「外部Jarの追加」にて②のjarファイルを追加 ・実行。
https://w.atwiki.jp/cappu/pages/48.html
クライアント package com.javaagogo.postjavaobject.httpclient; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.HttpURLConnection; import java.net.URL; import com.javaagogo.postjavaobject.data.DataObject; public class Main { public static void main(String[] args) { try { URL url = new URL("http //localhost 8080/postjavaobject"); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setDoInput(true); con.setDoOutput(true); DataObject data = new DataObject(); data.setName("I am client."); data.setId(1); // DataObjectを送信 ObjectOutputStream out = new ObjectOutputStream(con .getOutputStream()); out.writeObject(data); out.flush(); out.close(); ObjectInputStream in = new ObjectInputStream(con.getInputStream()); DataObject response = (DataObject) in.readObject(); in.close(); System.out.println("name=" + response.getName() + " id=" + response.getId()); } catch (Exception e) { e.printStackTrace(); } } } サーブレット package com.javaagogo.postjavaobject; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.javaagogo.postjavaobject.data.DataObject; @SuppressWarnings("serial") public class PostJavaObjectServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { try { // アプレットから要求を受信する ObjectInputStream in = new ObjectInputStream(req .getInputStream()); DataObject inData = (DataObject) in.readObject(); in.close(); // アプレットに返す文字列を作る DataObject outData = new DataObject(); outData.setName("サーブレット エコー " + inData.getName()); outData.setId(inData.getId()); // アプレットに送信する ObjectOutputStream out = new ObjectOutputStream(resp .getOutputStream()); out.writeObject(outData); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } データ package com.javaagogo.postjavaobject.data; import java.io.Serializable; public class DataObject implements Serializable{ /** * */ private static final long serialVersionUID = -6534725917724535071L; private int id ; public int getId() { return id; } public void setId(int id) { this.id = id; } public static long getSerialVersionUID() { return serialVersionUID; } public String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
https://w.atwiki.jp/honeybe/pages/24.html
Temp JavaからOracleのストアドプロシージャ、ストアドファンクション、パッケージを呼び出す際の注意点 SQLデータ型とJDBCタイプコード、Java型の対応 標準JDBC 1.0 型 SQL型 JDBCタイプ 標準Java型 Oracle 拡張機能Java 型 CHAR java.sql.Types.CHAR java.lang.String oracle.sql.CHAR VARCHAR2 java.sql.Types.VARCHAR java.lang.String oracle.sql.CHAR LONG java.sql.Types.LONGVARCHAR java.lang.String oracle.sql.CHAR NUMBER java.sql.Types.NUMERIC java.math.BigDecimal oracle.sql.NUMBER NUMBER java.sql.Types.DECIMAL java.math.BigDecimal oracle.sql.NUMBER NUMBER java.sql.Types.BIT boolean oracle.sql.NUMBER NUMBER java.sql.Types.TINYINT byte oracle.sql.NUMBER NUMBER java.sql.Types.SMALLINT short oracle.sql.NUMBER NUMBER java.sql.Types.INTEGER int oracle.sql.NUMBER NUMBER java.sql.Types.BIGINT long oracle.sql.NUMBER NUMBER java.sql.Types.REAL float oracle.sql.NUMBER NUMBER java.sql.Types.FLOAT double oracle.sql.NUMBER NUMBER java.sql.Types.DOUBLE double oracle.sql.NUMBER RAW java.sql.Types.BINARY byte[] oracle.sql.RAW RAW java.sql.Types.VARBINARY byte[] oracle.sql.RAW LONGRAW java.sql.Types.LONGVARBINARY byte[] oracle.sql.RAW DATE java.sql.Types.DATE java.sql.Date oracle.sql.DATE DATE java.sql.Types.TIME java.sql.Time oracle.sql.DATE DATE java.sql.Types.TIMESTAMP javal.sql.Timestamp oracle.sql.DATE 標準JDBC 2.0 型 SQL型 JDBCタイプ 標準Java型 Oracle 拡張機能Java 型 BLOB java.sql.Types.BLOB java.sql.Blob oracle.sql.BLOB CLOB java.sql.Types.CLOB java.sql.Clob oracle.sql.CLOB ユーザー定義オブジェクト java.sql.Types.STRUCT java.sql.Struct oracle.sql.STRUCT ユーザー定義参照 java.sql.Types.REF java.sql.Ref oracle.sql.REF ユーザー定義コレクション java.sql.Types.ARRAY java.sql.Array oracle.sql.ARRAY Oracle 拡張機能 SQL型 JDBCタイプ 標準Java型 Oracle 拡張機能Java 型 BFILE oracle.jdbc.OracleTypes.BFILE 利用不可 oracle.sql.BFILE ROWID oracle.jdbc.OracleTypes.ROWID 利用不可 oracle.sql.ROWID REF CURSOR 型 oracle.jdbc.OracleTypes.CURSOR java.sql.ResultSet oracle.jdbc.OracleResultSet 対応外のものは使用不可能? すくなくともBoolean型は使用不可能。 参考: JDBC 開発者ガイドおよびリファレンス第3章:基本機能データ型マッピング 第19章:コーディングのヒントおよびトラブルシューティングPL/SQLストアドプロシージャのブール型パラメータ
https://w.atwiki.jp/silver_emblem/pages/40.html
開発技術系トップへ戻る Java API 開発技術系トップへ戻る
https://w.atwiki.jp/api_programming/pages/111.html
参考サイト Swingを使ってみよう - JavaDrive Swing - とほほのJava入門 下位ページ Content イベント処理の流れと実装 イベント処理部品と処理先のひも付け イベント処理の方法 レイアウト ダイアログを簡単に表示する イベント処理の流れと実装 流れ ボタンが押される イベントが発行される イベントを受け取るボタン側にaddActionListenerメソッドを実行(処理する「クラス」を登録する) 登録するクラスは、ActionListerクラスをインプリメント登録するクラスの中で、actionPerformedメソッドを実装 処理を実行する イベント処理 http //www.javadrive.jp/tutorial/event/index1.html https //docs.oracle.com/javase/jp/6/api/java/awt/event/ActionEvent.html 部品と処理先のひも付け addActionListerで処理するクラスを登録する登録するクラスはActionListenerクラスをimplementsしていること 登録するクラスはactionPerformedメソッドを実装していること イベント処理の方法 ActionListenerをimplementsしたクラスで、actionPerformedをオーバーライドする。 actionPerformed(ActionEvent e) 複数のボタンなどの部品に対して、一つのクラスでイベント処理をする場合には、どの部品から呼びだされたイベントかを識別する方法について処理する方法を記述する必要がある。 String str = actionevent.getActionCommand(); レイアウト レイアウトマネージャーの設定 - JavaDrive http //www.ne.jp/asahi/hishidama/home/tech/java/swing/layout.html ダイアログを簡単に表示する JOptionPane JOptionPane static で shorMessageDialogというものが準備されている